﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SRS.Encryption
{
    class SBox
    {
        private byte[] box;

        /// <summary>
        /// constructor
        /// </summary>
        public SBox()
        {
            box = new byte[256];
        }

        /// <summary>
        /// prosedur untuk menggenerate isi SBox berdasarkan Lagged Fibonacci Generator
        /// dengan inisial value a dan b
        /// </summary>
        /// <param name="a"></param>
        /// <param name="b"></param>
        public void generateSBox(int a, int b)
        {
            int[] tempIntArray = new int[256];
            tempIntArray[0] = a;
            tempIntArray[1] = b;

            for (int i = 2; i < 256; ++i)
            {
                tempIntArray[i] = (tempIntArray[i - 1] + tempIntArray[i - 2]) % 256;
            }

            for (int i = 0; i < 256; ++i)
            {
                box[i] = (byte)tempIntArray[i];
            }
        }

        /// <summary>
        /// fungsi untuk mengembalikan byte pada suatu index
        /// </summary>
        /// <param name="index"></param>
        /// <returns></returns>
        public byte getByte(int index)
        {
            return box[index];
        }

        /// <summary>
        /// prosedur untuk mencetak SBox ke layar
        /// </summary>
        /// <param name="num"></param>
        public void printSBox(int num)
        {
            for (int i = 0; i < num; ++i)
            {
                Console.Write(getByte(i) + ", ");
            }
            Console.WriteLine();
        }
    }
}
